"""
author：fc
date：  2021/10/4
"""
# 主要是用gensim库中tfidf，doc2boc：常用
# 计算顺序：
"""
1.读取文档
2.对要计算的文档进行分词
3.对文档进行整理为指定格式，方便后续进行计算
4.计算出词语频率
5.【可选】对频率低的词语进行过滤
6.通过语料库建立词典
7.加载要对比的文档
8.将要对比的文档转换为稀疏向量
9.对稀疏向量进行进一步处理，得到新语料库
10.通过tfidf模型进行处理，得到tf-idf
11.通过token2id得到特征数
12.稀疏矩阵相似度，从而建立索引
"""
import jieba
from gensim import corpora,models,similarities
from collections import defaultdict

# 1读取文档
doc1="../files/txt/txt_similarity/1/analyze1.txt"
doc2="../files/txt/txt_similarity/1/analyze2.txt"
d1=open(doc1,encoding='utf=8').read()
d2=open(doc2,encoding='utf-8').read()

# 2文档分词
dic1=jieba.cut(d1)
dic2=jieba.cut(d2)

# 3文档格式整理
data1=''
data2=''
# 词语1 词语2 词语3 ....词语n
for item in dic1:
    data1+=item+' ' # 计算字典时，容易自动区别
for item in dic2:
    data2+=item+' '
documents=[data1,data2]
texts=[[word for word in document.split()] for document in documents]
print(texts)
# 4.计算词语频率
frequencies=defaultdict(int)
for text in texts:
    for token in text:
        frequencies[token]+=1
print(frequencies)

# 5.根据频率去掉词语
texts_=[[token for token in text if frequencies[token]>=2] for text in texts]

# 6.建立词典
dicts=corpora.Dictionary(texts)
dicts.save("../files/txt/txt_similarity/1/analyze_dicts.dict")

# 比较文档
doc3="../files/txt/txt_similarity/1/analyze3.txt"
d3 = open(doc3,encoding='utf-8').read()
dic3 = jieba.cut(d3)
data3=''
for item in dic3:
    data3=item+' ' # 视频中是赋值给data1
new_doc=data3

# 建立稀疏向量
new_vec=dicts.doc2bow(new_doc.split())
cor_pus = [dicts.doc2bow(text) for text in texts]
corpora.MmCorpus.serialize("../files/txt/txt_similarity/1/analyze.mm",cor_pus) # 保存稀疏向量
# 得到特征数
tfidf= models.TfidfModel(cor_pus)
fetureNum=len(dicts.token2id.keys())
print(f"特征数：{fetureNum}")
# 建立稀疏矩阵
sparse_matrix=similarities.SparseMatrixSimilarity(tfidf[cor_pus],num_features=fetureNum)
sim=sparse_matrix[tfidf[new_vec]]
print(f"相似性{sim}") # 相似性[0.10814761 0.        ],d3和d1的相似性为0.10817，d3和d2的相似性为0